/**
 * 
 */
package co.gov.medellin.sdep.sisdep.regulacion.service;

import java.util.List;

import co.gov.medellin.sdep.sisdep.common.message.MessageDescriptorConstant;
import co.gov.medellin.sdep.sisdep.common.service.BaseService;
import co.gov.medellin.sdep.sisdep.model.SolicitudAusencia;
import co.gov.medellin.sdep.sisdep.model.comp.SolicitudPermisoComp;
import co.gov.medellin.sdep.sisdep.model.dao.impl.ISolicitudAusenciaDAOT;
import co.gov.medellin.sdep.sisdep.regulacion.exception.SolicitudAusenciaException;
import co.gov.medellin.sdep.sisdep.regulacion.exception.SolicitudAusenciaRuntimeException;
import co.gov.medellin.sdep.sisdep.regulacion.exception.SolicitudModificaRuntimeException;
import co.gov.medellin.sdep.sisdep.regulacion.exception.descriptor.SolicitudAusenciaMessageDescriptor;
import co.gov.medellin.sdep.sisdep.regulacion.exception.descriptor.SolicitudModificaMessageDescriptor;

/**
 * @author acespedes
 * 
 */
public class SolicitudAusenciaServiceImpl extends BaseService implements
		ISolicitudAusenciaService {

	// ----------------------------------------------------------------------
	// --- propiedades y constructores init()
	// ----------------------------------------------------------------------

	/**
	 * default serial version
	 */
	private static final long serialVersionUID = 1L;
	/** */
	private ISolicitudAusenciaDAOT solicitudausenciaDAO;

	/**
	 * 
	 */
	public SolicitudAusenciaServiceImpl() {
	}

	// ----------------------------------------------------------------------
	// --- propiedades y constructores end()
	// ----------------------------------------------------------------------

	// ----------------------------------------------------------------------
	// --- implementacion de metodos para acciones init()
	// ----------------------------------------------------------------------

	/**
	 * 
	 */
	public void insert(SolicitudAusencia solicitudausencia)
			throws SolicitudAusenciaException {
		try {
			solicitudausencia.setUsuarioCrea(getPrincipalUser());
			// solicitudausencia.setFechaCrea(new Date());
			System.err.println("PREPARA EL INSERT EN EL SERVICIO");
			getSolicitudausenciaDAO().insert(solicitudausencia);
			System.err.println("TERMINA EL INSERT EN EL SERVICIO");
		} catch (Exception e) {
			Object[] infoError = {};
			if (e.getCause().toString().indexOf("UNIQUE KEY") >= 0) {
				throw new SolicitudAusenciaException(
						new SolicitudAusenciaMessageDescriptor(
								MessageDescriptorConstant.UK_VIOLATION),
						infoError, e);
			} else {
				throw new SolicitudAusenciaException(
						new SolicitudAusenciaMessageDescriptor(
								MessageDescriptorConstant.SAVE), infoError, e);
			}
		}
	}

	/**
	 * 
	 */
	public final void update(SolicitudAusencia solicitudausencia)
			throws SolicitudAusenciaException {
		try {
			solicitudausencia.setUsuarioModifica(getPrincipalUser());
			// solicitudausencia.setFechaModifica(new Date());
			getSolicitudausenciaDAO().update(solicitudausencia);
		} catch (Exception e) {
			Object[] infoError = {};
			if (e.getCause().toString().indexOf("UNIQUE KEY") >= 0) {
				throw new SolicitudAusenciaRuntimeException(
						new SolicitudAusenciaMessageDescriptor(
								MessageDescriptorConstant.UK_VIOLATION),
						infoError, e);
			} else {
				throw new SolicitudAusenciaRuntimeException(
						new SolicitudAusenciaMessageDescriptor(
								MessageDescriptorConstant.UPDATE), infoError, e);
			}
		}
	}

	/**
	 * 
	 */
	public final void delete(SolicitudAusencia solicitudausencia)
			throws SolicitudAusenciaException {
		try {
			solicitudausencia.setUsuarioModifica(getPrincipalUser());
			// solicitudausencia.setFechaModifica(new Date());
			getSolicitudausenciaDAO().delete(solicitudausencia);
		} catch (Exception e) {
			Object[] infoError = {};
			throw new SolicitudAusenciaRuntimeException(
					new SolicitudAusenciaMessageDescriptor(
							MessageDescriptorConstant.DELETE), infoError, e);
		}
	}

	/**
	 * @return
	 * 
	 */
	public final List load(int start, int max,
			SolicitudAusencia solicitudausencia)
			throws SolicitudAusenciaException {
		try {
			// return
			// getSolicitudAusenciaDAO().getAllSolicitudAusenciaPaginated(start,
			// max, criteria);
			return getSolicitudausenciaDAO().load(solicitudausencia);
		} catch (Exception e) {
			Object[] infoError = null;
			throw new SolicitudAusenciaRuntimeException(
					new SolicitudAusenciaMessageDescriptor(
							MessageDescriptorConstant.RETRIEVE), infoError, e);
		}
	}

	/**
	 * 
	 */
	public final SolicitudAusencia get(long id)
			throws SolicitudAusenciaException {
		try {
			return getSolicitudausenciaDAO().findByPrimaryKey(id);
		} catch (Exception e) {
			Object[] infoError = { new Long(id) };
			throw new SolicitudAusenciaRuntimeException(
					new SolicitudAusenciaMessageDescriptor(
							MessageDescriptorConstant.GET), infoError, e);
		}
	}

	/**
	 * 
	 */
	public SolicitudPermisoComp findByRelated(
			SolicitudAusencia solicitudausencia) {
		try {
			return getSolicitudausenciaDAO().findByRelated(solicitudausencia);
		} catch (Exception e) {
			Object[] infoError = { new Long(solicitudausencia.getIdSolicitud()
					.intValue()) };
			throw new SolicitudModificaRuntimeException(
					new SolicitudModificaMessageDescriptor(
							MessageDescriptorConstant.GET), infoError, e);
		}
	}
	
	/**
	 * 
	 */
	public SolicitudAusencia findByPrimaryKeyOfSolicitud(
			long idSolicitud) {
		try {
			return getSolicitudausenciaDAO().findByPrimaryKeyOfSolicitud(idSolicitud);
		} catch (Exception e) {
			Object[] infoError = { new Long(idSolicitud) };
			throw new SolicitudModificaRuntimeException(
					new SolicitudModificaMessageDescriptor(
							MessageDescriptorConstant.GET), infoError, e);
		}
	}
	

	// ----------------------------------------------------------------------
	// --- implementacion de metodos para acciones end()
	// ----------------------------------------------------------------------

	// ----------------------------------------------------------------------
	// --- getters and setters init()
	// ----------------------------------------------------------------------

	/**
	 * @return the solicitudausenciaDAO
	 */
	public ISolicitudAusenciaDAOT getSolicitudausenciaDAO() {
		return solicitudausenciaDAO;
	}

	/**
	 * @param solicitudausenciaDAO
	 *            the solicitudausenciaDAO to set
	 */
	public void setSolicitudausenciaDAO(
			ISolicitudAusenciaDAOT solicitudausenciaDAO) {
		this.solicitudausenciaDAO = solicitudausenciaDAO;
	}

	// ----------------------------------------------------------------------
	// --- getters and setters end()
	// ----------------------------------------------------------------------

}
